带有角度加载屏幕的Webdriver测试在无头模式下失败

时间:2017-11-07 12:53:09

标签: angularjs selenium selenium-webdriver selenium-chromedriver headless-browser

我有一个包含多个标签的简单页面。它使用角度。

在初始页面上加载元素加载,然后在加载数据时,我在所有禁用用户活动之前都有一个元素,直到数据加载为止。

脚本有一个'等到元素定位的可见性',当我使用chromedriver运行它时。

当我添加“headless”选项时,测试失败,因为它无法找到该元素。有什么我可以做的工作在我的页面和无头,或者我必须坚持使用GUI?

代码失败:

def loading_appear_disappear(self):
    element = BaseLocators.Locators.OVERLAY_GRID
    wait = WebDriverWait(self.driver, 10)      
    wait.until(EC.visibility_of_element_located(element))   
    wait.until(EC.invisibility_of_element_located(element))  

如果等待被删除,那么应该获得选项卡列表的代码不会带回任何元素

driver.find_elements(*BaseLocators.Locators.TAB_ELEMENTS)

2 个答案:

答案 0 :(得分:0)

因为我们需要等待Tab Elements所以,

的列表

而不是:

element = BaseLocators.Locators.OVERLAY_GRID
wait = WebDriverWait(self.driver, 10)
wait.until(EC.visibility_of_element_located(element))   
wait.until(EC.invisibility_of_element_located(element)) 

尝试使用:

wait = WebDriverWait(self.driver, 10)
wait.until(EC.presence_of_all_elements_located(*BaseLocators.Locators.TAB_ELEMENTS))

更新

正如您所提到的,elements are already 'loaded' but inaccessible due to the overlay grid,所以使用的最佳条款是element_to_be_clickable。在这种情况下,您可能必须将TAB_ELEMENTS中的任何一个定义/声明为constant,例如FIRST_TAB_ELEMENT wait 并在wait = WebDriverWait(self.driver, 10) wait.until(EC.element_to_be_clickable(*BaseLocators.Locators.FIRST_TAB_ELEMENT))

中使用它
[ForeignKey("xyzzy")]
public int? UserID { get; set; }  // This is a column in the table
public virtual User xyzzy { get; set; } // This is my instance of User

答案 1 :(得分:0)

我能够通过以下方式解决这个问题: grid_element实际上是由栏阻止的网格。我的猜测是我试图等待'在基页完成加载之前,所以它搞砸了。

try:
        if grid_element.is_displayed and grid_element.is_enabled:
            self.wait.until(EC.visibility_of_element_located(bar))
            self.wait.until(EC.invisibility_of_element_located(bar))
except WebDriverException:
        #error because 'another element would receive the click' meaning the overlay bar is present
        self.wait.until(EC.invisibility_of_element_located(bar))