我正在使用动作链插入Selenium Webdriver中,这是我的代码,谁能帮助我找出问题所在。这次我不使用页面对象模式,因此这里没有“自我”参数。
from selenium import webdriver
from behave import given, when, then
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
@given('Open RF page')
def open_website(context):
context.driver.get('https://www.raymourflanigan.com/')
@when('Select Living Room')
def select_living_room(context):
driver = webdriver.Chrome()
actions = ActionChains(driver)
menu = context.driver.find_element(By.XPATH, "//*[@id='Container']/div[1]/div[3]/div[1]/a")
sofa = context.driver.find_element(By.XPATH, "//*[@id='Container']/div[1]/div[3]/div[1]/div/div[1]/ul/li[2]/a")
actions.move_to_element(menu).move_to_element(sofa).click()
@then("Verify {product} are available")
def verify(context, product):
result = context.driver.find_element(By.CSS_SELECTOR, "h1.Category_Bnr_Title").text
assert 'Sofas & Couches' in result, f"Expected text is: {result}."
我也删除了perform()
,因为由于某些原因第二个函数不能在其中使用perform()
。似乎没有它也无法正常工作,因此,如果有人知道原因并可以帮助我,那将是很棒的!我正在学习)预先谢谢!
答案 0 :(得分:0)
有一些问题,但是没有太大的问题。似乎所有更改都需要在select_living_room
中完成。
select_living_room
的参数中包含一个context
对象,但是它要做的第一件事是创建一个全新的webDriver
。但是然后,它会访问完全不同的 webDriver
,它是context
的成员。我猜您正在尝试执行以下一项操作:
context
,其中已包含驱动程序。如果是这种情况,请消除此情况:driver = webdriver.Chrome()
context
的属性。在这种情况下,请更改为:context.driver = webdriver.Chrome()
get
来打开页面的任何地方。在select_living_room
中,有必要调用open_website
。ActionChain
未运行。最后需要添加一个perform()
呼叫。我将select_living_room
更改为这样(假设webDriver
已在context
内部设置):
@when('Select Living Room')
def select_living_room(context):
open_website(context)
menu = context.driver.find_element(By.XPATH, "//*[@id='Container']/div[1]/div[3]/div[1]/a")
sofa = context.driver.find_element(By.XPATH, "//*[@id='Container']/div[1]/div[3]/div[1]/div/div[1]/ul/li[2]/a")
actions = ActionChains(context.driver)
actions.move_to_element(menu).move_to_element(sofa).click().perform()
然后像这样运行:
opts = webdriver.ChromeOptions()
ctx = Context(webdriver.Chrome('path/to/chromedriver', options=opts))
select_living_room(ctx)
verify(ctx, None)
请注意,您没有提及Context
是什么。我把它存根了:
class Context:
def __init__(self, ctx):
self.driver = ctx