如何在selenium中正确使用By class和python

0dxa2lsx  于 2022-10-30  发布在  Python
关注(0)|答案(6)|浏览(154)

我写了一个代码来测试python中的selenium页面,代码很好用,但是现在我想重写得更好。
我已经创建了一个locators.py文件,如以下文档所述:selenium python binding - page objects
对于简单的定位符来说,这很简单。这是我到目前为止所做的:

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类中。

pkwftd7m

pkwftd7m1#

您应该能够按以下方式安排您询问的行:

someName = driver.find_element_by_class_name('coverUpload')
ButtonName = someName.find_element_by_class_name('pButton')
ButtonName.click()
km0tfn4u

km0tfn4u2#

如果元素是唯一的,你可以使用相对Xpath来代替2类搜索。

elem = driver.find_element(By.XPATH, '//*[@class="coverUpload"]//*[@class="pButton"]')
elem.click()
eimct9ow

eimct9ow4#

我建议使用selenium的find_element_by_css_selector,它允许更健壮和更复杂的类链接:

css_selector = '.coverUpload . pButton'
button = find_element_by_css_selector(css_selector)
button.click()
  • 注意:css选择器可能是脆弱的,所以请确保您有一个弹性选择策略。*
5jvtdoz2

5jvtdoz25#

在www.example.com中找到的提供的类locators.py不包含“coverUpload”或“pButton”定位器的类属性,但是,使用示例中定义的其中一个定位器,它将如下所示:

driver.find_element(*PhotoHomePageLocators.add_new_project_btn).click()

假设意图是点击出现的“添加新项目”按钮。

lrpiutwd

lrpiutwd6#

要找到具有所提供属性的按钮,我会使用“button”而不是“*"。我相信这样会更有效率。

elem = driver.find_element(By.XPATH, '//button[@class="coverUpload"]//button[@class="pButton"]')

相关问题