如何在selenium和python中正确使用By类
我已经编写了一段代码,用selenium在python中测试页面。代码可以正常工作,但现在我正试图将其重写得更好。如何在selenium和python中正确使用By类,python,selenium,Python,Selenium,我已经编写了一段代码,用selenium在python中测试页面。代码可以正常工作,但现在我正试图将其重写得更好。 我已经创建了一个locators.py文件,如以下文档所述:。 对于简单的定位器,这很简单。 这就是我到目前为止所做的: from selenium.webdriver.common.by import By class PhotoHomePageLocators(object): """A class for photographer home page locators. A
我已经创建了一个
locators.py
文件,如以下文档所述:。对于简单的定位器,这很简单。 这就是我到目前为止所做的:
from selenium.webdriver.common.by import By
class PhotoHomePageLocators(object):
"""A class for photographer home page locators. All photographer interface home page locators should come here"""
add_new_project_btn = (By.CLASS_NAME, 'addProject')
view_all_projects_btn = (By.CLASS_NAME, 'viewAllProjects')
class NameCoverPageLocators(object):
"""A class for name and cover home page locators. All name and cover page locators should come here"""
project_name_txt_box = (By.XPATH, '//*[@id="rform_pt2_0"]')
client_name_txt_box = (By.XPATH, '//*[@id="rform_pt2_1"]')
client_email_txt_box = (By.XPATH, '//*[@id="rform_pt2_2"]')
但我的代码中有以下几行代码,我不确定如何编写,以使其符合上述语法:
driver.find_element_by_class_name('coverUpload').find_element_by_class_name('pButton').click()
我在一个类中查找一个类,页面中有几个
pButton
类,但在coverUpload
类中只有一个类。使用您应该能够按照以下方式排列您要询问的行:
someName = driver.find_element_by_class_name('coverUpload')
ButtonName = someName.find_element_by_class_name('pButton')
ButtonName.click()
如果元素是唯一的,可以使用相对Xpath代替2类搜索
elem=driver.find_元素(By.XPATH,'/*[@class=“coverUpload”]/*[@class=“pButton”]”)
元素单击()
我建议使用selenium的通过_css_选择器查找_元素
,它允许更健壮和复杂的类链接:
css_selector = '.coverUpload . pButton'
button = find_element_by_css_selector(css_selector)
button.click()
注意:css选择器可能很脆弱,因此请确保您有一个弹性选择策略
尽可能避免使用以
/*
开头的定位器,因为它们效率很低。提供标签的名称更好。或者更好的是,当使用@id
时,使用的是By.id
谢谢你,@KirilS。我也得换那些。我不确定我是否完全理解xpath定位器的结构。但我想这是另一个问题。