您好我正在尝试打开一个页面并单击一个链接,该链接打开一个模式询问用户名。输入用户名后,它会要求输入密码。
我是selenium的新手,我正在努力熟悉浏览器自动化。
在右侧,可以选择登录/注册打开模态。
我的代码低于我在观看YouTube视频后尝试改编的代码: https://www.youtube.com/watch?v=--vqRAkcWoM
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox(executable_path="C:/Users/dabangg/Downloads/python/geckodriver-v0.16.1-win32/geckodriver.exe")
self.driver.get("http://mumbai.quikr.com/")
def test_Login(self):
driver =self.driver
# loginLink = "//input[@value='Log In']"
# loginLink="submit"
# loginLink="(//a[contains(@id,'loginLink')])[1]"
# loginLink = "(//a[contains(@href,'javascript:')])[1]"
loginLink = '//*[@id=\'loginLink\']/'
loginButtonElement = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(loginLink))
loginButtonElement.click()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
我尝试使用class/id/xpath
找到该元素,但它们都不起作用。使用span我能够找到元素,但后来我收到一条消息,说元素不可交互。
此外,在另一个不能有人请帮助我差异或使用下面
哪一个更好用/学习。
答案 0 :(得分:0)
尝试按linkText
找到所需元素并等待它变为可点击:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
link_text = "Login/Register"
loginButtonElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, link_text)))
loginButtonElement.click()
请注意,定位器'//*[@id=\'loginLink\']/'
中的谓词后面有一个额外的斜杠。尝试删除斜杠('//*[@id=\'loginLink\']'
)以使定位器有效
答案 1 :(得分:0)
我通常使用C#,但似乎导致问题的是您使用的是id,并且在代码中将其称为xpath:
find_element_by_xpath(LOGINLINK))
应该是find_element_by_id(loginLink)) 在C#中,我会将Id包含在引号中,但我不知道你是否会这样做。
如果你发现像xpath一样的元素,而不是使用这个find_element_by_xpath(.//* [@ id ='loginLink'] / span)...但是请注意我的语言中的引号,我们将其视为一个字符串,所以我不知道什么对你有用
答案 2 :(得分:-1)
我只是添加了一个睡眠命令,它现在正在运行。下面是代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
import time
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox(executable_path="C:/Users/dabangg/Downloads/python/geckodriver-v0.16.1-win32/geckodriver.exe")
self.driver.get("http://mumbai.quikr.com/")
def test_Login(self):
driver =self.driver
# loginLink = "//input[@value='Log In']"
# loginLink="submit"
# loginLink="(//a[contains(@id,'loginLink')])[1]"
# loginLink = "(//a[contains(@href,'javascript:')])[1]"
loginLink = ".//*[@id='loginLink']/span"
loginButtonElement = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(loginLink))
time.sleep(5)
loginButtonElement.click()
time.sleep(5)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()