【问题标题】:I am not able to select options using selenium webdriver in python django我无法在 python django 中使用 selenium webdriver 选择选项
【发布时间】:2021-04-24 01:55:09
【问题描述】:

我正在尝试选择一个下拉选项,但每当我运行它时,它都会引发错误。我是 Selenium 的新手。因此,任何建议都会有所帮助。 这是我的 HTML 代码

<select name="department" required="" id="id_department">
    <option value="" selected="">---------</option>
    <option value="SubAssembly">SubAssembly</option>
    <option value="BoardTest">BoardTest</option>
    <option value="PCBoards">PCBoards</option>
    <option value="TechAssembly">TechAssembly</option>
    <option value="Testing">Testing</option>
    <option value="Welding">Welding</option>
    <option value="SM">SM</option>
    <option value="Mach">Mach</option>
</select>

这是我的 Selenium 代码。

from selenium import webdriver
from accounts.models import RegisterForm
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from django.urls import reverse
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as E
from selenium.webdriver.support.ui import Select
import time
import pytest

class TestProjectRegisterPage(StaticLiveServerTestCase):

    def setUp(self):
        self.browser = webdriver.Chrome('functional_test/chromedriver.exe')
    
    def tearDown(self):
        self.browser.close()
    
    def test_no_project_alert_is_displayed(self):
        self.browser.get(self.live_server_url)
        time.sleep(5)
        self.browser.find_element_by_link_text('REGISTER').click()
        time.sleep(5)
        username = self.browser.find_element("id_username")
        username.send_keys('aayush')
        email = self.browser.find_element("id_email")
        email.send_keys('aayush@gmail.com')
        department = Select(self.find_element("id_department")).select_by_visible_text('Testing')
        time.sleep(10)

我在这里缺少什么?谢谢。我正在使用 chrome 网络驱动程序

【问题讨论】:

  • 在选择之前添加您的代码
  • @vitaliis 嘿,谢谢,你能澄清一下
  • 您的问题缺少一些重要的细节。您在选择之前执行的操作。我会发布一个答案,但我不确定是否只有这个问题
  • @vitaliis 我为 Selenium 添加了所有代码。
  • 好的,检查答案。它回答了您最初的问题

标签: python selenium selenium-webdriver automated-tests


【解决方案1】:
from selenium.webdriver.support.select import Select

department = Select(self.find_element_by_id("id_department"))
department.select_by_visible_text('Testing')

但你使用:Select(self.find_element("id_department"))

另外,在设置方法中至少添加driver.implicitly_wait(20)。尝试一一删除time.sleep()

小更新:

self.browser.find_element_by_link_text('REGISTER').click(),

username = self.browser.find_element_by_id("id_username"),

email = self.browser.find_element_by_id("id_email"),

department = Select(self.find_element_by_id("id_department"))

适用于所有定位器都是 ID 或链接文本的情况。

阅读此处了解定位器类型https://selenium-python.readthedocs.io/locating-elements.html

【讨论】:

  • 你能分享live_server_url吗?
  • 你看出区别了吗?您忘记了定位器类型
  • 自己尝试一下,如果一切正常,请接受答案。如您所见,选择并不是您代码中唯一的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2023-03-13
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多