简体   繁体   English

使用Python和Selenium无法选择类型

[英]Select Type not getting selected using python and selenium

I am new to python and using python and selenium to automate testing for a web2py application. 我是python的新手,并使用python和selenium来自动测试web2py应用程序。 In form I have one select option. 在表单中,我有一个选择选项。 I am not able to select that value. 我无法选择该值。 I tried different ways. 我尝试了不同的方法。

Code for testing is 测试代码是

from selenium import webdriver
import unittest, time
import xlrd

from openpyxl import load_workbook
from itertools import *
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from openpyxl import Workbook
from itertools import izip_longest as zip_longest


import os


class LoginTest(unittest.TestCase):

    def setUp(self):
        self.driver=webdriver.Firefox()
        self.driver.get("http://127.0.0.1:8000/ClinicalManagement/user/login?_next=/ClinicalManagement/admin")
        self.LoginXpath = "//input[@value='Log In']"       

            self.emailFieldID = "auth_user_email"
            self.passFieldID = "auth_user_password"
            self.InboxXpath = "id(':4b')/x:div/x:div[1]/x:span/x:a"





    def test_Basic(self):
        driver = self.driver
        wb=xlrd.open_workbook("cms_testcase.xlsx")
        sheetname = wb.sheet_names()
        sh1 = wb.sheet_by_index(0)


        rows = ['mhmi.saan@gmail.com']
        col = ['12345678']

        driver.find_element_by_id(self.emailFieldID).send_keys(rows[0])

        print("The user name  is entered")      


        driver.find_element_by_id(self.passFieldID).send_keys(col[0])
        print("The Password  is entered")

        time.sleep(1)

        driver.find_element_by_xpath(self.LoginXpath).click()
            #driver.implicitly_wait(50)
        time.sleep(1)
        driver.find_element_by_id('patient').click()
        time.sleep(1)
        driver.find_element_by_partial_link_text('Add').click()
        driver.find_element_by_id('patient_name').send_keys('Manasa')
        driver.find_element_by_id('patient_email').send_keys('manasa@gmail.com')
        driver.find_element_by_id('patient_phone').send_keys('9856254578')
        driver.find_element_by_id('patient_address').send_keys('Near gmail.com')
        driver.find_element_by_id('patient_gender'). select_by_visible_text('Male')





     #def tearDown(self):
     #  self.driver.quit()

     #    try:
        # driver.find_element_by_id(self.emailFieldID).send_keys(self.gmailUserName)

        # self.write_test_case_result('PASS', 'A1')
        # print('Find Username: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A1')
        # print('Find Username: FAIL')
  #         try:
        # driver.find_element_by_id(self.passFieldID).send_keys(self.gmailPassword) 
        # self.write_test_case_result('PASS', 'A2')
        # print('Find Password: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A2')
        # print('Find Password: FAIL')


     #    try:
        # driver.find_element_by_xpath(self.LoginXpath).click()

        # self.write_test_case_result('PASS', 'A3')
        # print('Find login button: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A3')
        # print('Find login button: FAIL')


    # def write_test_case_result(self, result, location):
    #     wb = Workbook()
    #     ws1 = wb.worksheets[0]
    #     ws1.title = 'Test result'
    #     dest_filename = 'Test_Result.xlsx'

    #     while True:
    #   if result == "PASS":
    #       ws1.cell(location).value = "PASSED"
    #       break
    #   else:
    #       ws1.cell(location).value = "FAILED"
    #       break
    #   break
    #     # Save the file
    #     wb.save(filename = dest_filename) 






if __name__ == "__main__":
    unittest.main()

When I am using "driver.find_element_by_id('patient_gender'). select_by_visible_text('Male')" none of the field in the form gets field: 当我使用“ driver.find_element_by_id('patient_gender')。select_by_visible_text('Male')“时,表单中的任何字段都不会获取字段:

使用driver.find_element_by_id选择性别

When I remove that line the form is filled with values but stops there 当我删除该行时,表单中填充了值,但到此为止

没有用于选择的driver.find_element_by_id

I have tried with xpath also and find_element_by_value and find_element_by_visible_text and like this - Select(driver.find_element_by_xpath("//select[@name='name']")).select_by_visible_text(" ") 我也尝试过xpath以及find_element_by_value和find_element_by_visible_text,像这样Select(driver.find_element_by_xpath("//select[@name='name']")).select_by_visible_text(" ")

I am extremely sorry for my long and boring description, but could find a better way. 对于冗长而无聊的描述,我深表歉意,但可以找到更好的方法。

Can you try to select using below syntax: 您可以尝试使用以下语法进行选择吗:

   WebDriverWait(driver, 10).until(EC.visibility_of_element_located(By.ID("id")))
    select = Select(self.driver.find_element_by_id("id"))
    select.select_by_visible_text('Male')

This is working for me 这对我有用

from selenium import webdriver
import unittest, time
import xlrd

from openpyxl import load_workbook
from itertools import *
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from openpyxl import Workbook
from itertools import izip_longest as zip_longest
from selenium.webdriver.support.ui import Select



import os


class LoginTest(unittest.TestCase):

    def setUp(self):
        self.driver=webdriver.Firefox()
        self.driver.get("http://127.0.0.1:8000/ClinicalManagement/user/login?_next=/ClinicalManagement/admin")
        self.LoginXpath = "//input[@value='Log In']"       

            self.emailFieldID = "auth_user_email"
            self.passFieldID = "auth_user_password"
            self.InboxXpath = "id(':4b')/x:div/x:div[1]/x:span/x:a"
        self.w2p = "//input[@value='w2p_keywords']"

        self.patient_name="//input[@id='patient_name']"
        self.patient_email="//input[@id='patient_email']"
        self.patient_phone="//input[@id='patient_phone']"
        self.patient_address="//input[@id='patient_address']"
        self.patient_gender="//select[@id='patient_gender']"
        self.patient_dob="//input[@id='patient_dob']"


    def test_Basic(self):
        driver = self.driver
        wb=xlrd.open_workbook("cms_testcase.xlsx")
        sheetname = wb.sheet_names()
        sh1 = wb.sheet_by_index(0)


        rows = ['mami.san@gmail.com']
        col = ['1234678']

        driver.find_element_by_id(self.emailFieldID).send_keys(rows[0])

        print("The user name  is entered")        


        driver.find_element_by_id(self.passFieldID).send_keys(col[0])
        print("The Password  is entered")

        time.sleep(1)

        driver.find_element_by_xpath(self.LoginXpath).click()
            #driver.implicitly_wait(50)
        time.sleep(1)
        driver.find_element_by_id('patient').click()
        time.sleep(1)
        driver.find_element_by_partial_link_text('Add').click()
        driver.find_element_by_id('patient_name').send_keys('Manasa')
        driver.find_element_by_id('patient_email').send_keys('maa@gmail.com')
        driver.find_element_by_id('patient_phone').send_keys('9856254578')
        driver.find_element_by_id('patient_address').send_keys('Near gmail.com')

        WebDriverWait(driver,10).until(lambda driver: driver.find_element_by_id('patient_gender'))
            print(driver.title)



        select = Select(driver.find_element_by_id("patient_gender"))
        select.select_by_visible_text('Male')

        driver.find_element_by_id('patient_dob').send_keys('2/2/2016')

        WebDriverWait(driver,10).until(lambda driver: driver.find_element_by_id('patient_gender'))
            print(driver.title)

        select = Select(driver.find_element_by_id("patient_blood_group"))
        select.select_by_visible_text('O+')








     #def tearDown(self):
     #    self.driver.quit()

     #    try:
        # driver.find_element_by_id(self.emailFieldID).send_keys(self.gmailUserName)

        # self.write_test_case_result('PASS', 'A1')
        # print('Find Username: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A1')
        # print('Find Username: FAIL')
  #           try:
        # driver.find_element_by_id(self.passFieldID).send_keys(self.gmailPassword)    
        # self.write_test_case_result('PASS', 'A2')
        # print('Find Password: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A2')
        # print('Find Password: FAIL')


     #    try:
        # driver.find_element_by_xpath(self.LoginXpath).click()

        # self.write_test_case_result('PASS', 'A3')
        # print('Find login button: PASS')
     #    except:
        # self.write_test_case_result('FAIL', 'A3')
        # print('Find login button: FAIL')


    # def write_test_case_result(self, result, location):
    #     wb = Workbook()
    #     ws1 = wb.worksheets[0]
    #     ws1.title = 'Test result'
    #     dest_filename = 'Test_Result.xlsx'

    #     while True:
    #     if result == "PASS":
    #         ws1.cell(location).value = "PASSED"
    #         break
    #     else:
    #         ws1.cell(location).value = "FAILED"
    #         break
    #     break
    #     # Save the file
    #     wb.save(filename = dest_filename)    






if __name__ == "__main__":
    unittest.main()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM