2015-01-16 4 views
1

Lettuce가 Behavior Driven 'sentences'를 선택하고 테스트에 사용할 코드를 실행합니다.Lettuce Webdriver가 xpath로 내 링크를 찾을 수 없습니다.

셀렌과 아주 잘 통합 된 '웹 드라이버'가 있습니다.

내 링크는 그래서 같다 :

<div class="pull-right"> 
    <a href="/logout">Logout ?</a> 
</div> 

그리고 단계는 github readme 설명 (중 하나)를 사용하려고 해요 :

:이 코드에 해당

I should see a link to "Google" with the url "http://google.com/" 
I should see a link that contains the text "Foobar" and the url "http://foobar.com/" 

@step('I should see a link to "(.*?)" with the url "(.*?)"$') 
def should_see_link_text(step, link_text, link_url): 
    assert_true(step, 
       world.browser.find_element_by_xpath(str(
        '//a[@href="%s"][./text()="%s"]' % 
        (link_url, link_text)))) 


@step('I should see a link that contains the text "(.*?)" ' 
     'and the url "(.*?)"$') 
def should_include_link_text(step, link_text, link_url): 
    return world.browser.find_element_by_xpath(str(
     '//a[@href="%s"][contains(., %s)]' % 
     (link_url, link_text))) 

하지만 Chrome Dev Tools에서 내 링크를 선택하면이 x- 경로로 표시됩니다 :

//*[@id="bs-example-navbar-collapse-1"]/div/div[2]/a 

'//a[@href="%s"][contains(., %s)]' 또는 '//a[@href="%s"][./text()="%s"]'과 유사합니다.

그래서 어떤 단계를 거쳐 내 링크를 캡처해야합니까? 그리고 lettuce-webdriver에서 사용할 수있는 것과 일치하도록 내 html을 변경해야합니까 (힌트 : 좋지 않을 것입니다). 바람직하게는 등

편집의 ID 또는 클래스를 지정하지 않고 : 오류 LWD 그것을 제공합니다

Traceback (most recent call last): 
     File "C:\Python34\lib\site-packages\lettuce\core.py", line 144, in __call__ret = self.function(self.step, *args, **kw) 
     File "C:\Python34\lib\site-packages\lettuce_webdriver\webdriver.py", line 107, in should_include_link_text(link_url, link_text))) 
     File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 230, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) 
     File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 662, in find_element {'using': by, 'value': value})['value'] 
     File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 173, in execute self.error_handler.check_response(response) 
     File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 166, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//a[@href=\"/logout\"][contains(., \"Logout ?\")]"} 
    Stacktrace: 
     at FirefoxDriver.prototype.findElementInternal_ (file:///D:/Users/CAStone/AppData/Local/Temp/tmpkxv5zfva/extensi 
ons/[email protected]/components/driver-component.js:9641:26) 
     at FirefoxDriver.prototype.findElement (file:///D:/Users/CAStone/AppData/Local/Temp/tmpkxv5zfva/extensions/fxdri 
[email protected]/components/driver-component.js:9650:3) 
     at DelayedCommand.prototype.executeInternal_/h (file:///D:/Users/CAStone/AppData/Local/Temp/tmpkxv5zfva/extensio 
ns/[email protected]/components/command-processor.js:11635:16) 
     at DelayedCommand.prototype.executeInternal_ (file:///D:/Users/CAStone/AppData/Local/Temp/tmpkxv5zfva/extensions 
/[email protected]/components/command-processor.js:11640:7) 
     at DelayedCommand.prototype.execute/< (file:///D:/Users/CAStone/AppData/Local/Temp/tmpkxv5zfva/extensions/fxdriv 
[email protected]/components/command-processor.js:11582:5) 

은 무엇 나를 걱정하는 것은 내 "selector":"//a[@href=\"/logout\"][contains(., \"Logout ?\")]" 싹둑의 자동 이스케이프입니다. \"/logout\"\"Logout ?\"의 정확한 문자열을 찾고 있다면 분명히 작동하지 않습니다.

답변

0

그것은 장고의 client 클래스에서 로그인하면, 셀레늄에 영향을주지 것으로 밝혀졌습니다. 그래서 페이지 셀레늄은

1

나는 the link text에 직접 의존하는 것 :

world.browser.find_element_by_link_text('Logout ?') 

또는 :

world.browser.find_element_by_partial_link_text('Logout') 
+0

. 내가 로그인 아니에요 때문에

내이 단계가 실패 '나는 로그인하고있어'이유입니다. 로그인하지 않은보고 내'* 단계에서 사용자 지정 단계와 가정 .py 파일? 나는 아직도 이것이 작동하지 않는 이유를 알고 싶습니다 .... – Pureferret

+1

@Pureferret, 맞춤 단계. 음,'should_include_link_text' 단계는'% s' 주위에 따옴표가 빠져 있기 때문에 적어도 작동하지 않습니다. – alecxe

+0

Alex, 저는 방금 HTML 페이지 전체를 http://www.xmlme.com/XpathTool.aspx에'//a[[href="/logout"][contains(.,"Logout? " ]'그것은 그것을 잘 찾습니다. 오류 메시지는 문제 일 수있는 몇 가지 미친 따옴표 이스케이프를 수행 중임을 의미합니다. – Pureferret