我正在尝试使用Selenium测试复杂的javascript界面(使用Python界面,以及跨多个浏览器).我有许多形式的按钮:
<div>My Button</div>
Run Code Online (Sandbox Code Playgroud)
我希望能够根据"我的按钮"搜索按钮(或者不区分大小写的部分匹配,例如"我的按钮"或"按钮")
我发现这非常困难,在某种程度上我觉得我错过了一些明显的东西.我到目前为止最好的事情是:
driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')
Run Code Online (Sandbox Code Playgroud)
但是,这是区分大小写的.我尝试过的另一件事是遍历页面上的所有div,并检查element.text属性.但是,每次你得到表格的情况:
<div class="outer"><div class="inner">My Button</div></div>
Run Code Online (Sandbox Code Playgroud)
div.outer还有"My Button"作为文本.为了解决这个问题,我试图查看div.outer是否是div.inner的父节点,但是无法弄清楚如何做到这一点(element.get_element_by_xpath('..')返回一个元素的父节点,但它测试不等于div.outer).此外,迭代浏览页面上的所有元素似乎非常慢,至少使用Chrome webdriver.
想法?
编辑:这个问题有点模糊.在这里询问(并回答)一个更具体的版本:如何在不包含子元素文本的情况下获取Selenium WebDriver中的元素文本(通过Python api)?
我正在使用BeautifulSoup来抓取一个网址,我有以下代码
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()
soup = BeautifulSoup(the_page)
soup.findAll('td',attrs={'class':'empformbody'})
Run Code Online (Sandbox Code Playgroud)
现在在上面的代码中我们可以findAll
用来获取与它们相关的标签和信息,但我想使用xpath.是否可以将xpath与BeautifulSoup一起使用?如果可能的话,有人可以给我一个示例代码,以便更有帮助吗?
我试图通过使用Selenium方法获取html页面中的标记文本内容,但似乎someElement.getText()
Python中没有方法.有什么帮助吗?
这是追溯:
AttributeError: 'WebElement' object has no attribute 'getText'
Run Code Online (Sandbox Code Playgroud) 是否有可能只从父元素获取文本而不是Selenium中的子元素?
示例:假设我有以下代码:
<div class="linksSection>
<a href="https://www.google.com/" id="google">Google Link
<span class="helpText">This link will take you to Google's home page.</span>
</a>
...
</div>
Run Code Online (Sandbox Code Playgroud)
在C#(或任何语言)中,我将:
string linktext = driver.FindElement(By.CssSelector(".linksSection > a#google")).Text;
Assert.AreEqual(linkText, "Google Link", "Google Link fails text test.");
Run Code Online (Sandbox Code Playgroud)
但是,linktext将具有"谷歌链接此链接将带您到谷歌的主页."
没有做一堆字符串操作(比如获取所有子节点的文本并从父节点的结果文本中减去它),有没有办法从父元素中获取文本?
使用Python 3.
假设:
<whatever>
text
<subchild>
other
</subchild>
</whatever>
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
elem = driver.find_element_by_xpath("//whatever")
elem.text包含"text other"
如果我这样做:
elem = driver.find_element_by_xpath("//whatever/text()[normalize-space()]")
elem不是Webelement.
我如何继续只抓"文本"(而不是"其他")?
Id est:仅抓取直接节点中的文本,而不抓取子节点.
更新:
原始HTML是:
<div class="border-ashes the-code text-center">
VIVEGRPN
<span class="cursor"></span>
<button class="btn btn-ashes zclip" data-clipboard-target=".the-code" data-coupon-code="VklWRUdSUE4=">
<span class="r">Hen, la.</span>
</div>
Run Code Online (Sandbox Code Playgroud) 什么是硒?
当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“硒的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。据此,我推断出Selenium是工具的集合,该集合包括IDE,WebDriver API(语言绑定),Grid,Selenium Standalone Server,浏览器驱动程序。必须下载适当的文件才能构建项目。
什么是WebDriver?
WebDriver是一个API。它用多种语言编写,这些语言称为语言绑定。API具有控制浏览器的功能。您可以使用这些功能编写脚本来以所需的方式(测试用例)控制浏览器。
这就是我所知道的。如果我错了,请纠正我。我想从面试的角度知道这两个问题的答案。