首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium在BrowserStack上等待失败

Selenium在BrowserStack上等待失败
EN

Stack Overflow用户
提问于 2020-08-04 01:01:22
回答 2查看 217关注 0票数 0

我们有一个用BrowserStack运行的自动化UI测试,在等待元素被添加到DOM时,它并不总是一致地运行,偶尔会超时,但当使用Chromedriver本地运行时,测试100%成功。

以下是selenium等待失败的一个示例:

代码语言:javascript
复制
return WebDriverWait(self.__driver, 10).until(
    ec.presence_of_element_located((By.XPATH, locator))
)

有没有其他人看到过与BrowserStack类似的不一致,并知道可能导致它的原因,以及是否有更好的方法等待元素变得可用。

我们得到的确切表达式是来自ec.presence_of_element_located((By.XPATH, locator))TimeoutException

EN

回答 2

Stack Overflow用户

发布于 2020-08-04 01:52:21

presence_of_element_located()

presence_of_element_located()是检查元素是否出现在页面的DOM上的期望值。这并不一定意味着元素是可见的。因此,需要等待出现第一个匹配的WebElement

通用用例

通常,在您的测试中,简单地等待元素的出现可能不足以满足您的需求,您可能需要等待元素成为可见的可交互的

要等到元素可见,您需要为visibility_of_element_located()归纳WebDriverWait,您的有效代码块将是:

代码语言:javascript
复制
return WebDriverWait(self.__driver, 10).until(
    ec.visibility_of_element_located((By.XPATH, locator))
)

为了等待元素可交互,您需要为element_to_be_clickable()归纳WebDriverWait,您的有效代码块将是:

代码语言:javascript
复制
return WebDriverWait(self.__driver, 10).until(
    ec.element_to_be_clickable((By.XPATH, locator))
)

注意::您必须添加以下导入:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec

这个用例

在这个用例中,下面这行代码:

代码语言:javascript
复制
ec.presence_of_element_located((By.XPATH, locator))

无法在所需的时间范围内确定所需的元素,因此您面临TimeoutException。

然而,从TimeoutException中很难挖掘出失败的实际结果。

解决方案

作为了解失败确切原因的解决方案,您需要删除WebDriverWait并将代码行替换为以下任一项:

  • find_element_by_class_name(name)
  • find_element_by_css_selector(css_selector)
  • find_element_by_id(id)
  • find_element_by_link_text(link_text)
  • find_element_by_name(name)
  • find_element_by_partial_link_text(partial_link_text)
  • find_element_by_tag_name(tag_name)
  • find_element_by_xpath(xpath)

如果需要,您可以在调试时通过time.sleep(secs)降低搜索诱导等待的速度。

参考文献

您可以在以下位置找到几个相关的讨论:

票数 2
EN

Stack Overflow用户

发布于 2020-08-04 05:05:08

此问题已解决。出于某种原因,将OS BrowserStack切换到OS X解决了这个问题。使用chrome-driver的本地测试在两个操作系统上都有效,但我们的BrowserStack测试只在Mac上一致有效,大约一半的时间都失败了。我们仍在努力了解这到底是为什么,但目前,这是修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63233808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档