im对python很新,试图创建可重用的代码。当我尝试通过传递登录类下使用的所有参数来调用test_main.py中的类Login和函数login_user时,我收到错误消息InvalidArgumentException:消息:无效参数:'using'必须是字符串。
在pytest上运行的test_main.py文件。
Locators_test是我拥有所有xpath的test_Locators.py文件的类
test_Locators.py
class Locators_test():
loginlink_xpath = "//a[@id='login-link']"
login_email = "xxxxx"
login_password = "xxxxx"
loginemail_id = "dnn_ctr1179_Login_txtEmail"
loginpassword_id = "dnn_ctr1179_Login_txtPassword"
clicklogin_id = "dnn_ctr1179_Login_btnLogin"
test_login.py
from Smoketest.locatorfile.test_Locators import Locators_test
class Login():
def __init__(self,driver):
self.driver = driver
def login_user(self,driver):
try:
loginButton = self.driver.find_element((By.XPATH, Locators_test.loginlink_xpath))
while loginButton.click() is True:
break
time.sleep(3)
self.driver.execute_script("window.scrollBy(0,300);")
EmailField = self.driver.find_element((By.ID, Locators_test.loginemail_id))
EmailField.send_keys(Locators_test.login_email)
PasswordField = self.driver.find_element((By.ID, Locators_test.loginpassword_id))
PasswordField.send_keys(Locators_test.login_password)
ClickLogin = self.driver.find_element((By.ID, Locators_test.clicklogin_id))
while ClickLogin.click() is True:
break
time.sleep(5)
userName = self.driver.find_element((By.XPATH, Locators_test.username_xpath))
print("Logged in as", userName.text)
except StaleElementReferenceException or ElementClickInterceptedException or TimeoutException as ex:
print(ex.message)
test_main.py
def test_setup():
driver = webdriver.Chrome(executable_path= Locators_test.browser_path)
driver.maximize_window()
driver.delete_all_cookies()
driver.get(homePage)
driver.implicitly_wait(5)
yield
print("test complete")
def test_login(test_setup):
from Smoketest.pages.test_login import Login
lo = Login(driver)
lo.login_user(((Locators_test.loginlink_xpath,Locators_test.loginemail_id,Locators_test.login_email,Locators_test.loginpassword_id,Locators_test.login_password,Locators_test.clicklogin_id,Locators_test.username_xpath)))
缩进都没问题
答案 0 :(得分:2)
我自己通过从行中删除多余的一对括号来对其进行了修复
int count;
for(int i=50;i>=1;i--){
count=0;
for(int j=1;j<50;j++){
if(i%j==0)
count++;
}
if(count==2){
if(i% 10==3 ||i %10==7 || i%10==1 ||i%10==9)
System.out.println(i);
}
}
正确的方法是
loginButton = self.driver.find_element((By.XPATH, Locators_test.loginlink_xpath))
ps:这适用于所有行。
答案 1 :(得分:0)
这对我有用,
locator = (By.XPATH, Locators_test.loginlink_xpath)
self.driver.find_element(*locator).click()
说明::在*<arguments>
中,除第一个参数以外的所有位置参数都将打包在一个元组中,因为它们不会被更改,确切的属性将反映在第二步。