无法通过xpath定位元素

时间:2016-07-09 13:29:02

标签: xpath

这是源html:

<div id="alert_signin" class="alert_modal_error">
    <div class="alert alert-danger alert-dismissable">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
        Invalid username or password.
    </div>
</div>

我真正需要的是检查消息&#34;无效的用户名或密码。&#34;出现(python + selenium webdriver)。但我不幸的是使用像

这样的xpath找到它
find_element_by_xpath('//div[@id=\'alert_signin\']/div[@class=\'alert\']').text

所以我决定使用消息文本找到确切的xpath。我尝试了几种选择,比如

find_element_by_xpath('//*[text()[contains(.,\'Invalid\')]]')

find_element_by_xpath('//*[contains(., \'Invalid username or password.\')]')

但每次得到&#34; NoSuchElementException:无法找到元素:{&#34;方法&#34;:&#34; xpath&#34;,&#34;选择器&#34;:blablabla&#34;

请咨询

3 个答案:

答案 0 :(得分:1)

无法直接将表达式指向Selenium中的文本节点。

相反,我会得到整个&#34;警告&#34;文本:

alert_text = driver.find_element_by_css_selector("#alert_signin .alert").text

然后,您可以应用&#34;包含&#34;检查:

assert "Invalid username or password." in alert_text

或者,删除&#34; x&#34;部分:

alert_text = alert_text.replace(u"×", "").strip()
assert alert_text == "Invalid username or password."

Python中的示例。

答案 1 :(得分:0)

请提供更多信息,请:

- 您是否有单击按钮以获取消息?

- 消息是否在特定于浏览器的警报中,或者是否是页面上显示的文本?

(如果是后者,请尝试类似if "Invalid username or password." in driver.page_source: print "SUCCESS!")

的内容

答案 2 :(得分:0)

实际上我发现的是我唯一需要的是使用implicitly_wait。 这段代码工作正常:

sign_in.click()
driver.implicitly_wait(30)
alert_text = driver.find_element_by_css_selector("div#alert_signin > div.alert.alert-danger.alert-dismissable").text
alert_text = alert_text.replace(u"×", "").strip()
assert alert_text == "Invalid username or password."

然而 alecxe 的注释在我尝试验证我的方法时非常有用

  

您无法直接将表达式指向Selenium中的文本节点。