问题
1、find_element_by_link_text() 本质上是xpath定位还是 css selector定位,还是其他别的定位
2、面试的时候被问到,什么时候选择xpath定位,什么时候选择id 定位
3、什么时候用xpath,什么时候用 css selector定位呢,两者之间的效率对比
以上的三个问题,麻烦各位老师解答
问题
1、find_element_by_link_text() 本质上是xpath定位还是 css selector定位,还是其他别的定位
2、面试的时候被问到,什么时候选择xpath定位,什么时候选择id 定位
3、什么时候用xpath,什么时候用 css selector定位呢,两者之间的效率对比
以上的三个问题,麻烦各位老师解答
1、感觉本质应该是css,但是没有很细节研究这个,因为link_text是通过定位超链接标签完成定位的,就是的文本。
2、什么时候都可以用xpath,因为他就是一个万能定位,但是实际的经验应该是特征值定位,因为xpath是一个模糊匹配,他会遍历dom树,然后层层匹配,所以性能会偏慢。特征值匹配会快速一点,原因就省略了。
3、css和xpath的应用场景基本上差不多,都是万能匹配的,只是css基于前端的jQuery定位方式,会比xpath快,所以对熟悉jquery的人会非常友好。
直接通过pycharm查看代码就好了,底层原理都在框架代码里
def find_element(self, by=By.ID, value=None):
"""
Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
possible.
:Usage:
element = driver.find_element(By.ID, 'foo')
:rtype: WebElement
"""
if self.w3c:
if by == By.ID:
by = By.CSS_SELECTOR
value = '[id="%s"]' % value
elif by == By.TAG_NAME:
by = By.CSS_SELECTOR
elif by == By.CLASS_NAME:
by = By.CSS_SELECTOR
value = ".%s" % value
elif by == By.NAME:
by = By.CSS_SELECTOR
value = '[name="%s"]' % value
return self.execute(Command.FIND_ELEMENT, {
'using': by,
'value': value})['value']
常见定位方式
class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
各个定位策略的细节
总结下就是
document.querySelectorAll("a")
遍历的是dom控件树document.evaluate("//a", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
遍历的是整个页面代码的xml所以平时在使用的时候,为了性能考虑,一般会使用css 进行定位较好的意思是吗
这点性能损耗不用在意,其实最终都会通过js,都是很快的。
好的,谢谢老师