【问题标题】:Looking element on few pages with loop “while” Python, Selenium使用循环“while” Python,Selenium 在几页上查看元素
【发布时间】:2017-08-05 18:25:45
【问题描述】:

在我的应用程序中,我有一个包含员工的表,但该表可以有超过 1 页的员工。我想检查是否添加了新员工(我创建的)我想使用 Selenium Webdriver Python 在表中检查该员工并单击它。整个想法是检查第一页,如果没有我正在寻找的 id 的员工,然后单击第二页,检查并单击员工,如果没有单击第三页等。我有一个功能可以在页面上运行1 比 1,但它不会检查我在该页面上需要的员工:

id = ()
def add_new_employee(driver, first_name, last_name):
driver.find_element_by_css_selector("#menu_pim_viewPimModule").click()
driver.find_element_by_css_selector("[name='btnAdd']").click()
driver.find_element_by_css_selector("#firstName").send_keys(first_name)
driver.find_element_by_css_selector("#lastName").send_keys(last_name)
driver.find_element_by_css_selector("#photofile").\
    send_keys(os.path.abspath("cloud-computing-IT.jpg"))
global id
id = driver.find_element_by_css_selector("#employeeId").get_attribute("value")

def new_employee_added(driver):
global id
driver.find_element_by_css_selector("#menu_pim_viewPimModule").click()
el = len(driver.find_elements_by_link_text("%s" % id))
while el < 1:
    try:
        driver.find_element_by_link_text("%s" % id).click()
    except NoSuchElementException:
        try:
            for i in range(1, 50):
                driver.find_element_by_link_text("%s" % i).click()

        except NoSuchElementException:
            return False

def test_new_employee(driver, first_name="Patrick", last_name="Patterson"):
login(driver, username="Admin", password="Password")
add_new_employee(driver,first_name, last_name)
new_employee_added(driver)
logout(driver)

问题出在这个函数上:

def new_employee_added(driver):
global id
driver.find_element_by_css_selector("#menu_pim_viewPimModule").click()
el = len(driver.find_elements_by_link_text("%s" % id))
while el < 1:
    try:
        driver.find_element_by_link_text("%s" % id).click()
    except NoSuchElementException:
        try:
            for i in range(1, 50):
                driver.find_element_by_link_text("%s" % i).click()

        except NoSuchElementException:
            return False

循环应该尝试在第一页上查找元素,如果没有转到第二页并在那里检查,但似乎它尝试在第一页上查找然后运行该循环:

 `for i in range(1, 50):
         driver.find_element_by_link_text("%s" % i).click()` 

点击页面不尝试查找员工

【问题讨论】:

    标签: python loops selenium while-loop global-variables


    【解决方案1】:

    您的主循环应该遍历所有页面并在找到所需的id 时中断。在您的代码中,您试图在第一页上找到id,如果第一页上没有它,您只需遍历其他页面而不执行搜索所需的id

    如果没有实际的html 源代码,很难为您提供一个好的解决方案,下面几行是一种伪代码:

    for i in range(1, 50):
        try: 
            # search for required element
            driver.find_element_by_link_text("%s" % id).click()
            break
        except NoSuchElementException:
            # go to next page as there is no required element on current page
            driver.find_element_by_link_text("%s" % i).click()
    

    附:似乎没有理由在您的函数中使用global,您可以简单地将参数添加到您的new_employee_added 作为new_employee_added(driver, id) 并使用适当的值调用它。

    附言不要使用"id"作为变量名,因为id()是Python内置函数

    【讨论】:

    • 谢谢,它可以工作,但是当我输入文本 id (“8513”)时,你能发送示例它应该如何使用参数作为我的 id 吗?
    • 只需将new_employee_added(driver, element_id) 称为new_employee_added(driver, "8513")
    • 但我从 def add_new_employee(driver, first_name, last_name): 收到了 element_id
    • add_new_employee 中的id = driver.find_element_by_css_selector("#employeeId").get_attribute("value") 替换为return driver.find_element_by_css_selector("#employeeId").get_attribute("value") 并将new_employee_added 称为new_employee_added(driver, add_new_employee(driver, "James", "Bond"))
    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多