Selenium按ID查找超时异常

时间:2018-09-10 07:41:04

标签: python selenium xpath webdriver

我对硒有问题。 我有类似的DOM结构:

<div class="window__popup" style="display: block; transform: translateY(0px);">
    ...
    <div id="user_product_name" class="input__block">
        ...
        <input type="text" name="name" required="required" class="input">
        <div class="placeholder">Представьтесь, пожалуйста</div>
        ...
    </div>
    ...
</div>

因此,默认情况下不会显示此div,但是当我单击按钮时,它会打开。我有这段代码来查找包含id的div:

self.form_elements["UserName"] = Input(self._driver, Locator("xpath", "div[@id='user_product_name']"))

self.form_elements["UserName"] = Input(self._driver, Locator("id", "user_product_name"))

这两个选项均无效,但会引发超时异常:

selenium.common.exceptions.TimeoutException: Message:

但是,此代码可以正常工作:

self.form_elements["UserName"] = Input(self._driver, \
        Locator("xpath", "//div[contains(@class, 'window__popup')]//div[contains(@class, 'placeholder') and text()='Представьтесь, пожалуйста']/ancestor::div[contains(@class, 'input__block')]"))

这就是为什么我认为问题出在隐藏元素内部的id为div的原因。如何在不编写大型xpath的情况下解决该问题?
编辑: 这段代码找到了一个元素,但是当我尝试输入时,它将引发异常。抱歉,正在编辑。

1 个答案:

答案 0 :(得分:0)

您的工作定位器和不工作定位器略有不同。
在工作定位器中,您正在div类cd /full/path/log ls | grep AAAA*log cd - #go back to the original path 中的div中查找元素。据我了解,window__popup不是唯一元素,并且可能存在于不可见的不同DOM部分中。
检查您在DOM中有多少个div[@id='user_product_name'] id的元素。不要忘记user_product_name返回位于DOM中且不可见的第一个元素。

尝试使用以下CSS选择器:

driver.find_elemet...