我有一个非常复杂的非公开的selenium脚本来执行GUI测试。在本地运行测试时一切正常。但是当我在docker镜像(在jenkins上使用)中运行完全相同的测试时,测试不会运行。在网页中找不到元素。
以下是我等待输入框出现并填写一些文字的部分:
self._handler.log("B")
elem = WebDriverWait(self._handler.webdriver, 30).\
until(EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='Create new collab']"))) # TIMEOUT
self._handler.log("C")
elem.clear()
self._handler.log("D")
elem.send_keys(collab_name)
我在WebDriverWait
行中收到超时错误。
我将页面源保存在log
步骤(就在WebDriverWait
行之前),并在html中看到以下部分:
<div class="md-tab container-centered" id="create" style="width: 988px; left: 988px;">
<div class="md-input-container md-theme-default md-input-placeholder md-input-focused">
<label>
Collab Name
</label>
<input class="md-input" placeholder="Create new collab" type="text"/>
<!-- -->
<!-- -->
<!-- -->
</div>
因此该元素在页面源中可用,并且也可见(如下面的截图'B'所示):
发生了什么事?硒中的一个错误?
附录
我还尝试了以下链:
elem = WebDriverWait(self._handler.webdriver, 30).\
until(EC.presence_of_element_located((By.XPATH, "//div[@id='create']//input")))
actions = ActionChains(self._handler.webdriver)
actions.move_to_element(elem)
actions.send_keys(collab_name)
actions.perform()
但在这种情况下,输入字段不会被collab_name
中的文本填充。输入字段保持为空。
答案 0 :(得分:2)
我建议使用visibility_of_element_located而不是presence_of_element_located。两者之间存在细微差别。尽管元素可能存在但并不意味着它也已经可见。
该元素在丝网印刷上可见意味着在制作此丝网印刷时可能只是在异常发生后才能看到它。