2015-12-30 47 views
3

如果需要滾動,Selenium Web驅動程序定位器總是將元素放在頁面頂部,但不會考慮浮動標題。目前,我創建了Selenium元素隱藏在浮動標題後

Actions actions = new Actions(this.webdriver); 
actions.sendKeys(Keys.ARROW_UP).perform(); 

一種變通方法心不是有一個更好的解決辦法來告訴webdriver的居中在屏幕中間的元素,而不是或頂端固定的距離?

橙色部分是從按鈕的藍色部分是標題:

hidden button in orange

+1

有關該問題的其他信息,如HTML頁面的屏幕截圖,實際的HTML等將爲您的問題提供更多上下文 – parishodak

+0

以可見舞臺中所需元素的方式調整您的滾動..您可以從機器人類獲取幫助,JavaScript執行者也按要求滾動。 –

回答

1

使用javascript帶上元件進入視野。這是一個可能的解決方案:

  1. 使用硒api將元素帶入視圖端口。
  2. 使用javascript來確定元素是否被另一個元素阻擋(浮動頁眉/頁腳等)。
  3. 使用javascript滾動到視圖端口的中間位置。

見的JavaScript工具類,我在這裏創造:https://github.com/gterre/stuff

使用... JavascriptUtils.bringIntoView(WebElement元);

我相信你可以根據你的需要修改腳本。

0

我解決了這樣的問題,所以你只需要定義在哪些情況下你的元素是不是在範圍和添加此方法,它會自動把它的滾動到視圖:

public void scroll_element_into_view(WebElementFacade element) { int Y = (element.getLocation().getY() - 200); JavascriptExecutor js = (JavascriptExecutor) getDriver(); js.executeScript("javascript:window.scrollTo(0," + Y + ");");}

Works的你可以通過id,css,xpath或任何方式找到每個元素。

+0

這隻有在可滾動容器是窗口時纔有效。 –

1

硒還有能力在與它們交互之前不將項目滾動到窗口的頂部(並因此將它們隱藏在浮動標題後面),而是置於底部。

這是通過'elementScrollBehavior'功能實現的,該功能可以設置爲1以將內容滾動到底部。

請參閱this stack overflow for how it's done in capybara

0

在我的情況下,我選擇隱藏那個浮動元素。

top = dr.find_element_by_xpath('//div[@node-type="top_all"]') 
dr.execute_script("arguments[0].setAttribute('style','display:none')", top) 

之後,移動到我想要的元素,我甚至可以添加一個偏移量。