硒可以自动检测网页上的文本框并输入值吗?

时间:2018-12-07 04:09:00

标签: python selenium iframe webdriver webdriverwait

我是自动化测试的新手。通过学习一些基本的硒,我知道我可以使用硒工具在线填写一些表格。以下是一些我供您参考的代码:

elem = self.driver.find_element_by_xpath("//*[@title='Registration']")
elem.click()
iframe = self.driver.find_elements_by_id('frm_reg_load_patient')[0]
self.driver.switch_to.default_content()
self.driver.switch_to.frame(iframe)
elem = self.driver.find_element_by_id("txtPatientLastName")
elem.clear()
elem.send_keys("Peng")
elem = self.driver.find_element_by_id("txtPatientFirstName")
elem.clear()
elem.send_keys("Richard")

这是网络的屏幕截图:

enter image description here

我的问题是,是否有可能自动找到文本框并填写一些随机值。我只是在测试是否可以创建新记录,因此这些值并不重要。

谢谢

2 个答案:

答案 0 :(得分:0)

由于所需元素位于<iframe>中,因此您必须:

  • 诱导 WebDriverWait 以使所需的框架可用并切换到它。
  • 诱导 WebDriverWait 以使所需的元素可点击
  • 您可以使用以下解决方案:

    WebDriverWait(self.driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"frm_reg_load_patient")))
    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.ID, "txtPatientLastName"))).send_keys("Peng")
    self.driver.find_element_by_id("txtPatientFirstName").send_keys("Richard")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

更新

根据您的评论更新,您的脚本/程序将更有效地用 WebDriverWait 代替隐式等待,但是说实话,没有现成的function()可用于扫描页面以查找任何元素,并填充随机数据。编写新的wrapper函数将以更好的方式满足您的需求,但是对于这个问题,这应该超出范围

答案 1 :(得分:0)

我自己找到了答案。如果有人有同样的问题:

//find all input fields where type = text or password and store them In array list 
txtfields.
 List<WebElement> txtfields = driver.findElements(By.xpath("//input[@type='text' or 
 @type='password']"));

//for loop to send text In all text box one by one.
 for(int a=0; a<txtfields.size();a++){   
 txtfields.get(a).sendKeys("Text"+(a+1));  
 }
 Thread.sleep(3000);