这是源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;
请咨询
答案 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中的文本节点。