如何同时使用不同iframe中的不同线程?

TL; DR:

两个线程由于webdriver状态不同(switch_to()状态不同)而相互干扰(请参见代码示例“ 1”和“ 2)”。

更详细:

有一个网站(不是我的网站,访问受限,不能在这里显示),其中包含1个主页和3个iframe。 在主页上有一个计数器-我每秒读取该计数器的值。 然后,我有一个GUI,可以在其中与QSlider进行交互,从而对3个iframe之一进行更改。

所以我有一个GUI线程和另一个线程(例如,检查时间)。

发生问题的位置: 如果发出QSlider信号,则调用的函数将webdriver更改为特定的帧(switch_to()),并且在mainpage-countdown-checker之间想要读取倒数时,它找不到元素,因为webdriver是不在主页上。

代码示例

在这里您可以看到两个函数相互干扰,因为这是从2个不同的线程调用的:

1)之所以调用此函数,是因为GUI发出信号。要更改网站上的特定元素,需要将网络驱动程序切换到特定框架:

def click_rating(driver,frame,rating,slider=None,value=None):

    try:
        driver.switch_to.frame(frame)  // SWITCH TO SPECIFIC FRAME
        if slider is None or value is None:
            for i in range(2,9):
                driver.find_element_by_id("OneChoiceQuestion" + str(i) + str(rating[i-2])).click()
        else:
            driver.find_element_by_id("OneChoiceQuestion" + str(slider+2) + str(value)).click()
    except InvalidArgumentException:
        print("InvalidArgumentException Error: [Deleted].")
    finally:
        driver.switch_to.default_content()  // SWITCH BACK

2)定期调用此函数以检查倒数计时器,但这取决于webdriver位于“ default_content()”中:

def get_passed_time_counter(driver):
    try:
        if driver.find_element_by_id("alarmClock").is_displayed():
            minutes = int(driver.find_element_by_id("alarmClock").text[11:13])
            seconds = int(driver.find_element_by_id("alarmClock").text[14:16])

            new_time = 180 - ((60 * minutes) + seconds)

            return new_time

    except ValueError:
        print("ValueError [update_time]: Couldn't update the time.")
        return False

倒数计时器不是唯一的问题,但可能是最好的解释。 所以我不是在寻找一个“修补程序”,而是试图找到倒数元素,直到找到它为止,而是在这种情况下找到结构,即它在另一个线程使用特定功能的同时等待,而我不会只要可能有一个“干净”的解决方案,它就可以与布尔标志一起使用。

hawkhorse 回答:如何同时使用不同iframe中的不同线程?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3160186.html

大家都在问